TensorFlow 在去年就不斷的promote v2.0 版,到底它改善的方向有那些呢? 正式版何時release? 整理一些馬路新聞與大家分享。
近來 TensorFlow 面臨 Facebook PyTorch 的強力挑戰,PyTorch 的市占率不斷攀升,依『Deep Learning Framework Power Scores 2018』分析,從工作需求來看,PyTorch 市占率還是有一段差距(圖一),但是,從專業期刊(ArXiv)論文引用率(圖二),已經產生一些威脅了。
圖一. 工作需求比例,圖片來源:Deep Learning Framework Power Scores 2018
圖二. ArXiv 論文引用率,圖片來源:Deep Learning Framework Power Scores 2018
PyTorch 攻擊 TensorFlow 論點是『TensorFlow 把簡單的問題複雜化,而 Keras 把複雜的問題太過簡單化』,最明顯的例子就是要建立一個『a+b』的運算圖,TensorFlow 程式如下:
import tensorflow as tf
import numpy as np
# Defining some constant values
a = tf.constant(5.0, name="a")
b = tf.constant(10.0, name="b")
# Some basic operations
x = tf.add(a, b, name="add")
with tf.Session() as sess:
print("x: ", sess.run(x))
# Closing the writer.
writer.close()
sess.close()
計算個a+b要寫十幾行,雖然,採取靜態運算圖(static computational graph)效能較好,但是,程式複雜,而且除錯困難,只有在sess.run() 後才能追蹤(trace)偵錯,反之,PyTorch 可以直接在模型中使用 Python 語法建立動態模型,相較之下簡單多了。
因此,TensorFlow 2.0 作了重大的變革,連標題『TensorFlow已死,TensorFlow 2.0長存』(TensorFlow is dead, long live TensorFlow!)的文章也出來了,除了強調『建模簡單化』,也延長戰線,加強整個開發/佈署過程的全面支援,包括分散式的處理。
在『建模簡單化』主要有兩方面:
使用 Eager execution 實踐 a+b 的程式碼如下,跟寫一般Python沒甚麼差別:
import tensorflow as tf
import numpy as np
# 啟動 eager execution 模式
tf.enable_eager_execution()
a = tf.constant([[1, 2],
[3, 4]])
b = tf.add(a, 1)
print(a+b)
整個開發/佈署過程的全面支援的加強,包括:
依據 TensorFlow 官網 v2.0 應該在 2019 Q2 發佈,顯然時程落後了,到目前為止還是 Beta 版,可參考『這裡』,其實,很多功能在目前的版本v1.3已經提供了, 只是在 v2.0 可能會更清楚吧。
TensorFlow 的家族龐大,提供高低階的API,而且,模組替換很快,有些模組未來就不支援了,在學習時要注意,不要在行將就木的功能上鑽研,以免白忙一場。
最後作一點工商廣告,有興趣學TensorFlow的同好,可參考『這裡』。